package main

import (
	"bufio"
	"context"
	"fmt"
	"io"
	"log"
	"os"
	stream "send_file/grpc_proto/stream"

	"google.golang.org/grpc"
)

func main() {
	addr := ":8080"
	//使用grpc.Dial 创建一个到指定的地址的 grpc 连接
	conn, err := grpc.Dial(addr, grpc.WithInsecure())
	if err != nil {
		log.Fatalf(fmt.Sprintf("grpc connect adddr[%s] failed,err:%v", addr, err))
	}

	defer conn.Close()

	// 初始化客户端
	client := stream.NewServiceStreamClient(conn)

	resp, err := client.DownLoadFile(context.Background(), &stream.Request{Name: "下载文件"})
	if err != nil {
		log.Fatalln(err)
	}

	file, err := os.OpenFile("1.jpg", os.O_CREATE|os.O_WRONLY, 0600)
	if err != nil {
		log.Fatalln(err)
	}
	defer file.Close()

	writer := bufio.NewWriter(file)

	for {
		// 客户端从服务端得到的响应是一个stream，所以可以通过Recv不断接收，直到遇到io.EOF表明服务端响应完毕了
		recv, err := resp.Recv()
		if err == io.EOF {
			break
		}
		fmt.Println(fmt.Sprintf("写入数据 %d 字节", len(recv.Content)))
		// 将每轮接收到的内容写入到文件中
		writer.Write(recv.Content)
	}

	writer.Flush()
}
